GD/libgd/libgd.c
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- gdImageCreate
- gdImageDestroy
- gdImageColorClosest
- gdImageColorExact
- gdImageColorAllocate
- gdImageColorDeallocate
- gdImageColorTransparent
- gdImageSetPixel
- gdImageBrushApply
- gdImageTileApply
- gdImageGetPixel
- gdImageLine
- gdImageDashedLine
- gdImageBoundsSafe
- gdImageChar
- gdImageCharUp
- gdImageString
- gdImageStringUp
- gdImageArc
- gdImageFillToBorder
- gdImageFill
- gdImageDump
- gdImageGifData
- gdImageGif
- gdImageGifPtr
- colorstobpp
- BumpPixel
- GIFNextPixel
- GIFEncode
- Putword
- Putchar
- ARGVAL
- MAXCODE
- MAXCODE
- HashTabOf
- CodeTabOf
- tab_prefixof
- tab_suffixof
- compress
- output
- cl_block
- cl_hash
- char_init
- char_out
- flush_char
- flush_char
- init_statics
- BitSet
- ReadOK
- LM_to_uint
- gdImageCreateFromGif
- ReadColorMap
- DoExtension
- GetDataBlock
- GetCode
- LWZReadByte
- ReadImage
- gdImageRectangle
- gdImageFilledRectangle
- gdImageCopy
- gdImageCopyResized
- gdGetWord
- gdPutWord
- gdGetByte
- gdImageCreateFromGd
- gdImageGdPtr
- gdImageGd
- fgets
- myfgets
- gdImageCreateFromXbm
- gdImagePolygon
- gdImageOpenPolygon
- gdImageFilledPolygon
- gdCompareInt
- gdImageSetStyle
- gdImageSetBrush
- gdImageSetTile
- gdImageInterlace
- allocDynamic
- appendDynamic
- reallocDynamic
- trimDynamic
- freeDynamic
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "io.h"
#include "gd.h"
#include "mtables.h"
#define TRUE 1
#define FALSE 0
static void gdImageBrushApply(gdImagePtr im, int x, int y);
static void gdImageTileApply(gdImagePtr im, int x, int y);
gdImagePtr gdImageCreate(int sx, int sy)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
gdImagePtr im;
im = (gdImage *) malloc(sizeof(gdImage));
im->pixels = (unsigned char **) malloc(sizeof(unsigned char *) * sx);
im->polyInts = 0;
im->polyAllocated = 0;
im->brush = 0;
im->tile = 0;
im->style = 0;
for (i=0; (i<sx); i++) {
im->pixels[i] = (unsigned char *) calloc(
sy, sizeof(unsigned char));
}
/* make sure that the colors are zeroed out */
for (i=0; i < gdMaxColors; i++) {
im->red[i]=0;
im->green[i]=0;
im->blue[i]=0;
}
im->sx = sx;
im->sy = sy;
im->colorsTotal = 0;
im->transparent = (-1);
im->interlace = 0;
return im;
}
void gdImageDestroy(gdImagePtr im)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
if (im == NULL) return;
for (i=0; (i<im->sx); i++) {
free(im->pixels[i]);
}
free(im->pixels);
if (im->polyInts) {
free(im->polyInts);
}
if (im->style) {
free(im->style);
}
free(im);
}
int gdImageColorClosest(gdImagePtr im, int r, int g, int b)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
long rd, gd, bd;
int ct = (-1);
long mindist = 0;
for (i=0; (i<(im->colorsTotal)); i++) {
long dist;
if (im->open[i]) {
continue;
}
rd = (im->red[i] - r);
gd = (im->green[i] - g);
bd = (im->blue[i] - b);
dist = rd * rd + gd * gd + bd * bd;
if ((i == 0) || (dist < mindist)) {
mindist = dist;
ct = i;
}
}
return ct;
}
int gdImageColorExact(gdImagePtr im, int r, int g, int b)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
for (i=0; (i<(im->colorsTotal)); i++) {
if (im->open[i]) {
continue;
}
if ((im->red[i] == r) &&
(im->green[i] == g) &&
(im->blue[i] == b)) {
return i;
}
}
return -1;
}
int gdImageColorAllocate(gdImagePtr im, int r, int g, int b)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
int ct = (-1);
for (i=0; (i<(im->colorsTotal)); i++) {
if (im->open[i]) {
ct = i;
break;
}
}
if (ct == (-1)) {
ct = im->colorsTotal;
if (ct == gdMaxColors) {
return -1;
}
im->colorsTotal++;
}
im->red[ct] = r;
im->green[ct] = g;
im->blue[ct] = b;
im->open[ct] = 0;
return ct;
}
void gdImageColorDeallocate(gdImagePtr im, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
/* Mark it open. */
im->open[color] = 1;
}
void gdImageColorTransparent(gdImagePtr im, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
im->transparent = color;
}
void gdImageSetPixel(gdImagePtr im, int x, int y, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int p;
switch(color) {
case gdStyled:
if (!im->style) {
/* Refuse to draw if no style is set. */
return;
} else {
p = im->style[im->stylePos++];
}
if (p != (gdTransparent)) {
gdImageSetPixel(im, x, y, p);
}
im->stylePos = im->stylePos % im->styleLength;
break;
case gdStyledBrushed:
if (!im->style) {
/* Refuse to draw if no style is set. */
return;
}
p = im->style[im->stylePos++];
if ((p != gdTransparent) && (p != 0)) {
gdImageSetPixel(im, x, y, gdBrushed);
}
im->stylePos = im->stylePos % im->styleLength;
break;
case gdBrushed:
gdImageBrushApply(im, x, y);
break;
case gdTiled:
gdImageTileApply(im, x, y);
break;
default:
if (gdImageBoundsSafe(im, x, y)) {
im->pixels[x][y] = color;
}
break;
}
}
static void gdImageBrushApply(gdImagePtr im, int x, int y)
/* [<][>][^][v][top][bottom][index][help] */
{
int lx, ly;
int hy;
int hx;
int x1, y1, x2, y2;
int srcx, srcy;
if (!im->brush) {
return;
}
hy = gdImageSY(im->brush)/2;
y1 = y - hy;
y2 = y1 + gdImageSY(im->brush);
hx = gdImageSX(im->brush)/2;
x1 = x - hx;
x2 = x1 + gdImageSX(im->brush);
srcy = 0;
for (ly = y1; (ly < y2); ly++) {
srcx = 0;
for (lx = x1; (lx < x2); lx++) {
int p;
p = gdImageGetPixel(im->brush, srcx, srcy);
/* Allow for non-square brushes! */
if (p != gdImageGetTransparent(im->brush)) {
gdImageSetPixel(im, lx, ly,
im->brushColorMap[p]);
}
srcx++;
}
srcy++;
}
}
static void gdImageTileApply(gdImagePtr im, int x, int y)
/* [<][>][^][v][top][bottom][index][help] */
{
int srcx, srcy;
int p;
if (!im->tile) {
return;
}
srcx = x % gdImageSX(im->tile);
srcy = y % gdImageSY(im->tile);
p = gdImageGetPixel(im->tile, srcx, srcy);
/* Allow for transparency */
if (p != gdImageGetTransparent(im->tile)) {
gdImageSetPixel(im, x, y,
im->tileColorMap[p]);
}
}
int gdImageGetPixel(gdImagePtr im, int x, int y)
/* [<][>][^][v][top][bottom][index][help] */
{
if (gdImageBoundsSafe(im, x, y)) {
return im->pixels[x][y];
} else {
return 0;
}
}
/* Bresenham as presented in Foley & Van Dam */
void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
dx = abs(x2-x1);
dy = abs(y2-y1);
if (dy <= dx) {
d = 2*dy - dx;
incr1 = 2*dy;
incr2 = 2 * (dy - dx);
if (x1 > x2) {
x = x2;
y = y2;
ydirflag = (-1);
xend = x1;
} else {
x = x1;
y = y1;
ydirflag = 1;
xend = x2;
}
gdImageSetPixel(im, x, y, color);
if (((y2 - y1) * ydirflag) > 0) {
while (x < xend) {
x++;
if (d <0) {
d+=incr1;
} else {
y++;
d+=incr2;
}
gdImageSetPixel(im, x, y, color);
}
} else {
while (x < xend) {
x++;
if (d <0) {
d+=incr1;
} else {
y--;
d+=incr2;
}
gdImageSetPixel(im, x, y, color);
}
}
} else {
d = 2*dx - dy;
incr1 = 2*dx;
incr2 = 2 * (dx - dy);
if (y1 > y2) {
y = y2;
x = x2;
yend = y1;
xdirflag = (-1);
} else {
y = y1;
x = x1;
yend = y2;
xdirflag = 1;
}
gdImageSetPixel(im, x, y, color);
if (((x2 - x1) * xdirflag) > 0) {
while (y < yend) {
y++;
if (d <0) {
d+=incr1;
} else {
x++;
d+=incr2;
}
gdImageSetPixel(im, x, y, color);
}
} else {
while (y < yend) {
y++;
if (d <0) {
d+=incr1;
} else {
x--;
d+=incr2;
}
gdImageSetPixel(im, x, y, color);
}
}
}
}
/* As above, plus dashing */
#define dashedSet \
{ \
dashStep++; \
if (dashStep == gdDashSize) { \
dashStep = 0; \
on = !on; \
} \
if (on) { \
gdImageSetPixel(im, x, y, color); \
} \
}
void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
int dashStep = 0;
int on = 1;
dx = abs(x2-x1);
dy = abs(y2-y1);
if (dy <= dx) {
d = 2*dy - dx;
incr1 = 2*dy;
incr2 = 2 * (dy - dx);
if (x1 > x2) {
x = x2;
y = y2;
ydirflag = (-1);
xend = x1;
} else {
x = x1;
y = y1;
ydirflag = 1;
xend = x2;
}
dashedSet;
if (((y2 - y1) * ydirflag) > 0) {
while (x < xend) {
x++;
if (d <0) {
d+=incr1;
} else {
y++;
d+=incr2;
}
dashedSet;
}
} else {
while (x < xend) {
x++;
if (d <0) {
d+=incr1;
} else {
y--;
d+=incr2;
}
dashedSet;
}
}
} else {
d = 2*dx - dy;
incr1 = 2*dx;
incr2 = 2 * (dx - dy);
if (y1 > y2) {
y = y2;
x = x2;
yend = y1;
xdirflag = (-1);
} else {
y = y1;
x = x1;
yend = y2;
xdirflag = 1;
}
dashedSet;
if (((x2 - x1) * xdirflag) > 0) {
while (y < yend) {
y++;
if (d <0) {
d+=incr1;
} else {
x++;
d+=incr2;
}
dashedSet;
}
} else {
while (y < yend) {
y++;
if (d <0) {
d+=incr1;
} else {
x--;
d+=incr2;
}
dashedSet;
}
}
}
}
int gdImageBoundsSafe(gdImagePtr im, int x, int y)
/* [<][>][^][v][top][bottom][index][help] */
{
return (!(((y < 0) || (y >= im->sy)) ||
((x < 0) || (x >= im->sx))));
}
void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int cx, cy;
int px, py;
int fline;
cx = 0;
cy = 0;
if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
return;
}
fline = (c - f->offset) * f->h * f->w;
for (py = y; (py < (y + f->h)); py++) {
for (px = x; (px < (x + f->w)); px++) {
if (f->data[fline + cy * f->w + cx]) {
gdImageSetPixel(im, px, py, color);
}
cx++;
}
cx = 0;
cy++;
}
}
void gdImageCharUp(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int cx, cy;
int px, py;
int fline;
cx = 0;
cy = 0;
if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
return;
}
fline = (c - f->offset) * f->h * f->w;
for (py = y; (py > (y - f->w)); py--) {
for (px = x; (px < (x + f->h)); px++) {
if (f->data[fline + cy * f->w + cx]) {
gdImageSetPixel(im, px, py, color);
}
cy++;
}
cy = 0;
cx++;
}
}
void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, char *s, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
int l;
l = strlen(s);
for (i=0; (i<l); i++) {
gdImageChar(im, f, x, y, (unsigned char)s[i], color);
x += f->w;
}
}
void gdImageStringUp(gdImagePtr im, gdFontPtr f, int x, int y, char *s, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
int l;
l = strlen(s);
for (i=0; (i<l); i++) {
gdImageCharUp(im, f, x, y, (unsigned char)s[i], color);
y -= f->w;
}
}
/* s and e are integers modulo 360 (degrees), with 0 degrees
being the rightmost extreme and degrees changing clockwise.
cx and cy are the center in pixels; w and h are the horizontal
and vertical diameter in pixels. Nice interface, but slow, since
I don't yet use Bresenham (I'm using an inefficient but
simple solution with too much work going on in it; generalizing
Bresenham to ellipses and partial arcs of ellipses is non-trivial,
at least for me) and there are other inefficiencies (small circles
do far too much work). */
void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int i;
int lx = 0, ly = 0;
int w2, h2;
w2 = w/2;
h2 = h/2;
while (e < s) {
e += 360;
}
for (i=s; (i <= e); i++) {
int x, y;
x = ((long)cost[i % 360] * (long)w2 / costScale) + cx;
y = ((long)sint[i % 360] * (long)h2 / sintScale) + cy;
if (i != s) {
gdImageLine(im, lx, ly, x, y, color);
}
lx = x;
ly = y;
}
}
#if 0
/* Bresenham octant code, which I should use eventually */
int x, y, d;
x = 0;
y = w;
d = 3-2*w;
while (x < y) {
gdImageSetPixel(im, cx+x, cy+y, color);
if (d < 0) {
d += 4 * x + 6;
} else {
d += 4 * (x - y) + 10;
y--;
}
x++;
}
if (x == y) {
gdImageSetPixel(im, cx+x, cy+y, color);
}
#endif
void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int lastBorder;
/* Seek left */
int leftLimit, rightLimit;
int i;
leftLimit = (-1);
if (border < 0) {
/* Refuse to fill to a non-solid border */
return;
}
for (i = x; (i >= 0); i--) {
if (gdImageGetPixel(im, i, y) == border) {
break;
}
gdImageSetPixel(im, i, y, color);
leftLimit = i;
}
if (leftLimit == (-1)) {
return;
}
/* Seek right */
rightLimit = x;
for (i = (x+1); (i < im->sx); i++) {
if (gdImageGetPixel(im, i, y) == border) {
break;
}
gdImageSetPixel(im, i, y, color);
rightLimit = i;
}
/* Look at lines above and below and start paints */
/* Above */
if (y > 0) {
lastBorder = 1;
for (i = leftLimit; (i <= rightLimit); i++) {
int c;
c = gdImageGetPixel(im, i, y-1);
if (lastBorder) {
if ((c != border) && (c != color)) {
gdImageFillToBorder(im, i, y-1,
border, color);
lastBorder = 0;
}
} else if ((c == border) || (c == color)) {
lastBorder = 1;
}
}
}
/* Below */
if (y < ((im->sy) - 1)) {
lastBorder = 1;
for (i = leftLimit; (i <= rightLimit); i++) {
int c;
c = gdImageGetPixel(im, i, y+1);
if (lastBorder) {
if ((c != border) && (c != color)) {
gdImageFillToBorder(im, i, y+1,
border, color);
lastBorder = 0;
}
} else if ((c == border) || (c == color)) {
lastBorder = 1;
}
}
}
}
void gdImageFill(gdImagePtr im, int x, int y, int color)
/* [<][>][^][v][top][bottom][index][help] */
{
int lastBorder;
int old;
int leftLimit, rightLimit;
int i;
old = gdImageGetPixel(im, x, y);
if (color == gdTiled) {
/* Tile fill -- got to watch out! */
int p, tileColor;
int srcx, srcy;
if (!im->tile) {
return;
}
/* Refuse to flood-fill with a transparent pattern --
I can't do it without allocating another image */
if (gdImageGetTransparent(im->tile) != (-1)) {
return;
}
srcx = x % gdImageSX(im->tile);
srcy = y % gdImageSY(im->tile);
p = gdImageGetPixel(im->tile, srcx, srcy);
tileColor = im->tileColorMap[p];
if (old == tileColor) {
/* Nothing to be done */
return;
}
} else {
if (old == color) {
/* Nothing to be done */
return;
}
}
/* Seek left */
leftLimit = (-1);
for (i = x; (i >= 0); i--) {
if (gdImageGetPixel(im, i, y) != old) {
break;
}
gdImageSetPixel(im, i, y, color);
leftLimit = i;
}
if (leftLimit == (-1)) {
return;
}
/* Seek right */
rightLimit = x;
for (i = (x+1); (i < im->sx); i++) {
if (gdImageGetPixel(im, i, y) != old) {
break;
}
gdImageSetPixel(im, i, y, color);
rightLimit = i;
}
/* Look at lines above and below and start paints */
/* Above */
if (y > 0) {
lastBorder = 1;
for (i = leftLimit; (i <= rightLimit); i++) {
int c;
c = gdImageGetPixel(im, i, y-1);
if (lastBorder) {
if (c == old) {
gdImageFill(im, i, y-1, color);
lastBorder = 0;
}
} else if (c != old) {
lastBorder = 1;
}
}
}
/* Below */
if (y < ((im->sy) - 1)) {
lastBorder = 1;
for (i = leftLimit; (i <= rightLimit); i++) {
int c;
c = gdImageGetPixel(im, i, y+1);
if (lastBorder) {
if (c == old) {
gdImageFill(im, i, y+1, color);
lastBorder = 0;
}
} else if (c != old) {
lastBorder = 1;
}
}
}
}
#ifdef TEST_CODE
void gdImageDump(gdImagePtr im)
/* [<][>][^][v][top][bottom][index][help] */
{
int i, j;
for (i=0; (i < im->sy); i++) {
for (j=0; (j < im->sx); j++) {
printf("%d", im->pixels[j][i]);
}
printf("\n");
}
}
#endif
/* Code drawn from ppmtogif.c, from the pbmplus package
**
** Based on GIFENCOD by David Rowley <mgardi@watdscu.waterloo.edu>. A
** Lempel-Zim compression based on "compress".
**
** Modified by Marcel Wijkstra <wijkstra@fwi.uva.nl>
**
** Copyright (C) 1989 by Jef Poskanzer.
**
** Permission to use, copy, modify, and distribute this software and its
** documentation for any purpose and without fee is hereby granted, provided
** that the above copyright notice appear in all copies and that both that
** copyright notice and this permission notice appear in supporting
** documentation. This software is provided "as is" without express or
** implied warranty.
**
** The Graphics Interchange Format(c) is the Copyright property of
** CompuServe Incorporated. GIF(sm) is a Service Mark property of
** CompuServe Incorporated.
*/
/*
* a code_int must be able to hold 2**GIFBITS values of type int, and also -1
*/
typedef int code_int;
#ifdef SIGNED_COMPARE_SLOW
typedef unsigned long int count_int;
typedef unsigned short int count_short;
#else /*SIGNED_COMPARE_SLOW*/
typedef long int count_int;
#endif /*SIGNED_COMPARE_SLOW*/
/* this is used for creating GIFs in main memory*/
typedef struct dpStruct {
void* data;
int logicalSize;
int realSize;
int dataGood;
} dynamicPtr;
static int colorstobpp(int colors);
static void BumpPixel (void);
static int GIFNextPixel (gdImagePtr im);
static void GIFEncode (dynamicPtr *dp, int GWidth, int GHeight,
int GInterlace, int Background, int Transparent, int BitsPerPixel,
int *Red, int *Green, int *Blue, gdImagePtr im);
static void Putword (int w, dynamicPtr* dp);
static void Putchar(int a, dynamicPtr* dp);
static void compress (int init_bits, dynamicPtr* dp, gdImagePtr im);
static void output (code_int code);
static void cl_block (void);
static void cl_hash (register count_int hsize);
static void char_init (void);
static void char_out (int c);
static void flush_char (void);
/* Allows for reuse */
static void init_statics(void);
/* these functions operate on in-memory dynamic pointers */
static int allocDynamic (dynamicPtr* dp,int initialSize);
static int appendDynamic (dynamicPtr* dp, const void* src, int size);
static int reallocDynamic (dynamicPtr* dp, int required);
static int trimDynamic (dynamicPtr* dp);
static void freeDynamic (dynamicPtr* dp);
static dynamicPtr* gdImageGifData (gdImagePtr im);
/* return data as a dynamic pointer */
static dynamicPtr* gdImageGifData (gdImagePtr im) {
/* [<][>][^][v][top][bottom][index][help] */
int interlace, transparent, BitsPerPixel;
dynamicPtr* dp;
dp = (dynamicPtr*) malloc(sizeof(dynamicPtr));
if (dp == NULL) {
return NULL;
}
if (!allocDynamic(dp,1024))
return NULL;
interlace = im->interlace;
transparent = im->transparent;
BitsPerPixel = colorstobpp(im->colorsTotal);
/* Clear any old values in statics strewn through the GIF code */
init_statics();
/* All set, let's do it. */
GIFEncode(
dp, im->sx, im->sy, interlace, 0, transparent, BitsPerPixel,
im->red, im->green, im->blue, im);
/* if there were problems along the way, we clean up and return NULL */
if (dp->dataGood) {
trimDynamic(dp);
return dp;
} else {
freeDynamic(dp);
free(dp);
return NULL;
}
}
void gdImageGif(gdImagePtr im, FILE *out)
/* [<][>][^][v][top][bottom][index][help] */
{
dynamicPtr* dp;
dp = gdImageGifData(im);
if (dp == NULL)
return;
/* print the file to output */
fwrite(dp->data,1,dp->logicalSize,out);
/* get rid of the data -- we're done with it */
freeDynamic(dp);
free(dp);
}
void* gdImageGifPtr(gdImagePtr im, int* size) {
/* [<][>][^][v][top][bottom][index][help] */
dynamicPtr* dp;
void* data;
*size = 0;
dp = gdImageGifData(im);
if (dp == NULL)
return NULL;
*size = dp->logicalSize;
data = dp->data;
free(dp);
return data;
}
static int
colorstobpp(int colors)
/* [<][>][^][v][top][bottom][index][help] */
{
int bpp = 0;
if ( colors <= 2 )
bpp = 1;
else if ( colors <= 4 )
bpp = 2;
else if ( colors <= 8 )
bpp = 3;
else if ( colors <= 16 )
bpp = 4;
else if ( colors <= 32 )
bpp = 5;
else if ( colors <= 64 )
bpp = 6;
else if ( colors <= 128 )
bpp = 7;
else if ( colors <= 256 )
bpp = 8;
return bpp;
}
/*****************************************************************************
*
* GIFENCODE.C - GIF Image compression interface
*
* GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent,
* BitsPerPixel, Red, Green, Blue, gdImagePtr )
*
*****************************************************************************/
static int Width, Height;
static int curx, cury;
static long CountDown;
static int Pass = 0;
static int Interlace;
/*
* Bump the 'curx' and 'cury' to point to the next pixel
*/
static void
BumpPixel(void)
/* [<][>][^][v][top][bottom][index][help] */
{
/*
* Bump the current X position
*/
++curx;
/*
* If we are at the end of a scan line, set curx back to the beginning
* If we are interlaced, bump the cury to the appropriate spot,
* otherwise, just increment it.
*/
if( curx == Width ) {
curx = 0;
if( !Interlace )
++cury;
else {
switch( Pass ) {
case 0:
cury += 8;
if( cury >= Height ) {
++Pass;
cury = 4;
}
break;
case 1:
cury += 8;
if( cury >= Height ) {
++Pass;
cury = 2;
}
break;
case 2:
cury += 4;
if( cury >= Height ) {
++Pass;
cury = 1;
}
break;
case 3:
cury += 2;
break;
}
}
}
}
/*
* Return the next pixel from the image
*/
static int
GIFNextPixel(gdImagePtr im)
/* [<][>][^][v][top][bottom][index][help] */
{
int r;
if( CountDown == 0 )
return EOF;
--CountDown;
r = gdImageGetPixel(im, curx, cury);
BumpPixel();
return r;
}
/* public */
static void
GIFEncode(dynamicPtr *dp, int GWidth, int GHeight,
/* [<][>][^][v][top][bottom][index][help] */
int GInterlace, int Background, int Transparent, int BitsPerPixel,
int *Red, int *Green, int *Blue,
gdImagePtr im)
{
int B;
int RWidth, RHeight;
int LeftOfs, TopOfs;
int Resolution;
int ColorMapSize;
int InitCodeSize;
int i;
Interlace = GInterlace;
ColorMapSize = 1 << BitsPerPixel;
RWidth = Width = GWidth;
RHeight = Height = GHeight;
LeftOfs = TopOfs = 0;
Resolution = BitsPerPixel;
/*
* Calculate number of bits we are expecting
*/
CountDown = (long)Width * (long)Height;
/*
* Indicate which pass we are on (if interlace)
*/
Pass = 0;
/*
* The initial code size
*/
if( BitsPerPixel <= 1 )
InitCodeSize = 2;
else
InitCodeSize = BitsPerPixel;
/*
* Set up the current x and y position
*/
curx = cury = 0;
/*
* Write the Magic header
*/
appendDynamic(dp,Transparent < 0 ? "GIF87a" : "GIF89a",6);
/*
* Write out the screen width and height
*/
Putword( RWidth, dp );
Putword( RHeight, dp );
/*
* Indicate that there is a global colour map
*/
B = 0x80; /* Yes, there is a color map */
/*
* OR in the resolution
*/
B |= (Resolution - 1) << 5;
/*
* OR in the Bits per Pixel
*/
B |= (BitsPerPixel - 1);
/*
* Write it out
*/
Putchar( B, dp );
/*
* Write out the Background colour
*/
Putchar ( Background, dp );
/*
* Byte of 0's (future expansion)
*/
Putchar( 0, dp );
/*
* Write out the Global Colour Map
*/
for( i=0; i<ColorMapSize; ++i ) {
Putchar( Red[i], dp );
Putchar( Green[i], dp );
Putchar( Blue[i], dp );
}
/*
* Write out extension for transparent colour index, if necessary.
*/
if ( Transparent >= 0 ) {
Putchar( '!', dp );
Putchar( 0xf9, dp );
Putchar( 4, dp );
Putchar( 1, dp );
Putchar( 0, dp );
Putchar( 0, dp );
Putchar( (unsigned char) Transparent, dp );
Putchar( 0, dp );
}
/*
* Write an Image separator
*/
Putchar( ',', dp );
/*
* Write the Image header
*/
Putword( LeftOfs, dp );
Putword( TopOfs, dp );
Putword( Width, dp );
Putword( Height, dp );
/*
* Write out whether or not the image is interlaced
*/
if( Interlace )
Putchar( 0x40, dp );
else
Putchar( 0x00, dp );
/*
* Write out the initial code size
*/
Putchar( InitCodeSize, dp );
/*
* Go and actually compress the data
*/
compress( InitCodeSize+1, dp, im );
/*
* Write out a Zero-length packet (to end the series)
*/
Putchar( 0, dp );
/*
* Write the GIF file terminator
*/
Putchar( ';', dp );
}
/*
* Write out a word to the GIF pointer
*/
static void
Putword(int w, dynamicPtr* dp)
/* [<][>][^][v][top][bottom][index][help] */
{
Putchar( w & 0xff, dp );
Putchar( (w / 256) & 0xff, dp );
}
/*
* Write out a character to the GIF pointer
*/
static void
Putchar(int a, dynamicPtr* dp)
/* [<][>][^][v][top][bottom][index][help] */
{
unsigned char b;
b = a;
appendDynamic(dp,&b,1);
}
/***************************************************************************
*
* GIFCOMPR.C - GIF Image compression routines
*
* Lempel-Ziv compression based on 'compress'. GIF modifications by
* David Rowley (mgardi@watdcsu.waterloo.edu)
*
***************************************************************************/
/*
* General DEFINEs
*/
#define GIFBITS 12
#define HSIZE 5003 /* 80% occupancy */
#ifdef NO_UCHAR
typedef char char_type;
#else /*NO_UCHAR*/
typedef unsigned char char_type;
#endif /*NO_UCHAR*/
/*
*
* GIF Image compression - modified 'compress'
*
* Based on: compress.c - File compression ala IEEE Computer, June 1984.
*
* By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas)
* Jim McKie (decvax!mcvax!jim)
* Steve Davies (decvax!vax135!petsd!peora!srd)
* Ken Turkowski (decvax!decwrl!turtlevax!ken)
* James A. Woods (decvax!ihnp4!ames!jaw)
* Joe Orost (decvax!vax135!petsd!joe)
*
*/
#include <ctype.h>
#define ARGVAL() (*++(*argv) || (--argc && *++argv))
/* [<][>][^][v][top][bottom][index][help] */
static int n_bits; /* number of bits/code */
static int maxbits = GIFBITS; /* user settable max # bits/code */
static code_int maxcode; /* maximum code, given n_bits */
static code_int maxmaxcode = (code_int)1 << GIFBITS; /* should NEVER generate this code */
#ifdef COMPATIBLE /* But wrong! */
# define MAXCODE(n_bits) ((code_int) 1 << (n_bits) - 1)
/* [<][>][^][v][top][bottom][index][help] */
#else /*COMPATIBLE*/
# define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1)
/* [<][>][^][v][top][bottom][index][help] */
#endif /*COMPATIBLE*/
static count_int htab [HSIZE];
static unsigned short codetab [HSIZE];
#define HashTabOf(i) htab[i]
/* [<][>][^][v][top][bottom][index][help] */
#define CodeTabOf(i) codetab[i]
/* [<][>][^][v][top][bottom][index][help] */
static code_int hsize = HSIZE; /* for dynamic table sizing */
/*
* To save much memory, we overlay the table used by compress() with those
* used by decompress(). The tab_prefix table is the same size and type
* as the codetab. The tab_suffix table needs 2**GIFBITS characters. We
* get this from the beginning of htab. The output stack uses the rest
* of htab, and contains characters. There is plenty of room for any
* possible stack (stack used to be 8000 characters).
*/
#define tab_prefixof(i) CodeTabOf(i)
/* [<][>][^][v][top][bottom][index][help] */
#define tab_suffixof(i) ((char_type*)(htab))[i]
/* [<][>][^][v][top][bottom][index][help] */
#define de_stack ((char_type*)&tab_suffixof((code_int)1<<GIFBITS))
static code_int free_ent = 0; /* first unused entry */
/*
* block compression parameters -- after all codes are used up,
* and compression rate changes, start over.
*/
static int clear_flg = 0;
static int offset;
static long int in_count = 1; /* length of input */
static long int out_count = 0; /* # of codes output (for debugging) */
/*
* compress stdin to stdout
*
* Algorithm: use open addressing double hashing (no chaining) on the
* prefix code / next character combination. We do a variant of Knuth's
* algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime
* secondary probe. Here, the modular division first probe is gives way
* to a faster exclusive-or manipulation. Also do block compression with
* an adaptive reset, whereby the code table is cleared when the compression
* ratio decreases, but after the table fills. The variable-length output
* codes are re-sized at this point, and a special CLEAR code is generated
* for the decompressor. Late addition: construct the table according to
* file size for noticeable speed improvement on small files. Please direct
* questions about this implementation to ames!jaw.
*/
static int g_init_bits;
static dynamicPtr* g_outptr;
static int ClearCode;
static int EOFCode;
static void
compress(int init_bits, dynamicPtr* dp, gdImagePtr im)
/* [<][>][^][v][top][bottom][index][help] */
{
register long fcode;
register code_int i /* = 0 */;
register int c;
register code_int ent;
register code_int disp;
register code_int hsize_reg;
register int hshift;
/*
* Set up the globals: g_init_bits - initial number of bits
* g_outfile - pointer to output file
*/
g_init_bits = init_bits;
g_outptr = dp;
/*
* Set up the necessary values
*/
offset = 0;
out_count = 0;
clear_flg = 0;
in_count = 1;
maxcode = MAXCODE(n_bits = g_init_bits);
ClearCode = (1 << (init_bits - 1));
EOFCode = ClearCode + 1;
free_ent = ClearCode + 2;
char_init();
ent = GIFNextPixel( im );
hshift = 0;
for ( fcode = (long) hsize; fcode < 65536L; fcode *= 2L )
++hshift;
hshift = 8 - hshift; /* set hash code range bound */
hsize_reg = hsize;
cl_hash( (count_int) hsize_reg); /* clear hash table */
output( (code_int)ClearCode );
#ifdef SIGNED_COMPARE_SLOW
while ( (c = GIFNextPixel( im )) != (unsigned) EOF ) {
#else /*SIGNED_COMPARE_SLOW*/
while ( (c = GIFNextPixel( im )) != EOF ) { /* } */
#endif /*SIGNED_COMPARE_SLOW*/
++in_count;
fcode = (long) (((long) c << maxbits) + ent);
i = (((code_int)c << hshift) ^ ent); /* xor hashing */
if ( HashTabOf (i) == fcode ) {
ent = CodeTabOf (i);
continue;
} else if ( (long)HashTabOf (i) < 0 ) /* empty slot */
goto nomatch;
disp = hsize_reg - i; /* secondary hash (after G. Knott) */
if ( i == 0 )
disp = 1;
probe:
if ( (i -= disp) < 0 )
i += hsize_reg;
if ( HashTabOf (i) == fcode ) {
ent = CodeTabOf (i);
continue;
}
if ( (long)HashTabOf (i) > 0 )
goto probe;
nomatch:
output ( (code_int) ent );
++out_count;
ent = c;
#ifdef SIGNED_COMPARE_SLOW
if ( (unsigned) free_ent < (unsigned) maxmaxcode) {
#else /*SIGNED_COMPARE_SLOW*/
if ( free_ent < maxmaxcode ) { /* } */
#endif /*SIGNED_COMPARE_SLOW*/
CodeTabOf (i) = free_ent++; /* code -> hashtable */
HashTabOf (i) = fcode;
} else
cl_block();
}
/*
* Put out the final code.
*/
output( (code_int)ent );
++out_count;
output( (code_int) EOFCode );
}
/*****************************************************************
* TAG( output )
*
* Output the given code.
* Inputs:
* code: A n_bits-bit integer. If == -1, then EOF. This assumes
* that n_bits =< (long)wordsize - 1.
* Outputs:
* Outputs code to the file.
* Assumptions:
* Chars are 8 bits long.
* Algorithm:
* Maintain a GIFBITS character long buffer (so that 8 codes will
* fit in it exactly). Use the VAX insv instruction to insert each
* code in turn. When the buffer fills up empty it and start over.
*/
static unsigned long cur_accum = 0;
static int cur_bits = 0;
static unsigned long masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F,
0x001F, 0x003F, 0x007F, 0x00FF,
0x01FF, 0x03FF, 0x07FF, 0x0FFF,
0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
static void
output(code_int code)
/* [<][>][^][v][top][bottom][index][help] */
{
cur_accum &= masks[ cur_bits ];
if( cur_bits > 0 )
cur_accum |= ((long)code << cur_bits);
else
cur_accum = code;
cur_bits += n_bits;
while( cur_bits >= 8 ) {
char_out( (unsigned int)(cur_accum & 0xff) );
cur_accum >>= 8;
cur_bits -= 8;
}
/*
* If the next entry is going to be too big for the code size,
* then increase it, if possible.
*/
if ( free_ent > maxcode || clear_flg ) {
if( clear_flg ) {
maxcode = MAXCODE (n_bits = g_init_bits);
clear_flg = 0;
} else {
++n_bits;
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else
if ( n_bits == maxbits )
maxcode = maxmaxcode;
else